package com.the.ui.widge.photoview

import android.content.Context
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Canvas
import android.graphics.Paint
import android.util.AttributeSet
import android.view.View
import com.the.ui.R
import com.theone.common.ext.logE

//  ┏┓　　　┏┓
//┏┛┻━━━┛┻┓
//┃　　　　　　　┃
//┃　　　━　　　┃
//┃　┳┛　┗┳　┃
//┃　　　　　　　┃
//┃　　　┻　　　┃
//┃　　　　　　　┃
//┗━┓　　　┏━┛
//    ┃　　　┃                  神兽保佑
//    ┃　　　┃                  永无BUG！
//    ┃　　　┗━━━┓
//    ┃　　　　　　　┣┓
//    ┃　　　　　　　┏┛
//    ┗┓┓┏━┳┓┏┛
//      ┃┫┫　┃┫┫
//      ┗┻┛　┗┻┛
/**
 * @author The one
 * @date 2021-11-03 16:56
 * @describe 居中充满显示一张图片
 * @email 625805189@qq.com
 * @remark
 */
open class PhotoView1 @JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0,
    defStyleRes: Int = 0
) :
    View(context, attrs, defStyleAttr, defStyleRes) {

    /**
     * 原始X偏移量
     */
    open var originalOffsetX: Float = 0.0f

    /**
     * 原始Y偏移量
     */
    open var originalOffsetY: Float = 0.0f

    /**
     * 当前放大倍数
     */
    open var currentScale: Float = 0.0F
        set(value) {
            // PhotoView3中的属性动画执行时，会不断地通过反射调用这个set方法
            field = value
            invalidate()
        }

    open val mPaint: Paint by lazy {
        Paint()
    }

    open val mBitmap: Bitmap by lazy {
        BitmapFactory.decodeResource(resources, R.mipmap.photo1)
    }

    /**
     * 计算出放大系数
     */
    protected open fun computeScale() {
        // 横向：宽>高  纵向：高<宽
        // 按照当前图片来说，是一张横向的图片，且宽度小于屏幕的宽度
        // 这个时候要将图片放大 屏幕宽/图片宽 倍
        currentScale = width / mBitmap.width.toFloat()
    }

    override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
        super.onSizeChanged(w, h, oldw, oldh)
        // 图片居中时左上角的坐标（X,Y）
        // View宽度 - 图片宽度 的 一半 就是距离左边的距离
        originalOffsetX = (width - mBitmap.width) / 2f
        // View高度 - 图片高度 的 一半 就是距离顶部的距离
        originalOffsetY = (height - mBitmap.height) / 2f

        computeScale()
    }

    protected open fun translate(canvas: Canvas) {}

    override fun onDraw(canvas: Canvas?) {
        super.onDraw(canvas)
        canvas?.run {
            translate(this)
            //以(width/2f,height/2f)为中心点，将画布长宽分别变为原来的currentScale/currentScale倍
            scale(currentScale, currentScale, width / 2f, height / 2f)
            // 图片居中时左上角的坐标（X,Y）
            drawBitmap(mBitmap, originalOffsetX, originalOffsetY, mPaint)
        }
    }

    open fun release() {
        mBitmap.recycle()
    }

}